package com.tianjin.design.decorator;

/**
 *
 * @author tianjin
 *
 * 2023年3月30日
 * TODO
 *
 * Decorator 装饰器抽象类，实现要扩展的功能接口
 */
public abstract class PersonDecorator implements Person {

	/**
	 * 为什么这里要定义一个被装饰类？
	 * 此模式就是对已有功能进行装饰，其实就是扩展，具体如何扩展由装饰子类决定，对外只需要暴露一个接收器，也就是说对于调用客户端来说，客户端只需要知道我扩展的对象是谁就可以了，
	 * 将需要扩展的对象传递给装饰器，剩下的就交给装饰器完成，客户端操作仍然不变，
	 * 也就是在客户端看来，只是把操作对象给到装饰器，装饰器还是会返回一个操作对象（这也是为什么装饰器必须要实现功能接口的一个原因），
	 * 用新返回的操作对象调用方法，此时的接口就已经完成了扩展，实际上是装饰器调用了传入对象的功能方法且进行了装饰，也就是扩展。
	 */
	Person person;

	public PersonDecorator(Person person) {
		this.person = person;
	}


	@Override
	public void eat() {
		person.eat();
	}
}
